public class TestClass {
    public static void main(String[] args) {
        MyQueue myQueue=new MyQueue<String>();
        myQueue.push("1");
        myQueue.push("2");
        System.out.println(myQueue.pop());
        myQueue.push("3");
        myQueue.push("4");
        while (!myQueue.empty()){
            System.out.println(myQueue.pop());
        }
    }

    /**
     * 使用两个栈来模拟队列，一个用来入栈，一个用来出栈
     * @param <T>
     */
    static class MyQueue<T>{
        private Stack<T> inStack = new Stack<>();
        private Stack<T> outStack = new Stack<>();

        //使用inStack来接收新入栈的数据
        public void push(T t) {
            inStack.push(t);
        }

        //出队列
        public T pop(){
            //如果用于出队列的栈为空，就把inStack都放到outStack中，再从outStack出栈
            if (outStack.empty()){
                while (!inStack.empty()){
                    outStack.push(inStack.pop());
                }
            }
            return outStack.pop();
        }

        //判空，两个队列都为空，才能为空
        public boolean empty(){
            return inStack.empty() && outStack.empty();
        }
    }
}